<?php
declare (strict_types = 1);

namespace app\admin\controller;

use think\facade\Validate;
use think\Request;
use app\admin\model\User as UserModel;
use think\exception\ValidateException;
use app\admin\validate\User as UserValidate;



class User extends Base
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
//        $data = UserModel::field('id,username,gender,email')->paginate(5);
        $data = UserModel::field('id,username,gender,email')
//                        ->page($this->page,$this->pageSize)
                        ->select();
        return $this->create($data,
                        $data->isEmpty() ? '数据不存在' :'数据请求成功',
                        201);
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        //这里验证部分内容，其它自行扩展
        $data = $request->param();
        //验证返回
        try {
        //验证数据
            validate(UserValidate::class)->check($data);
        } catch (ValidateException $validateException) {
            //返回错误
            return $this->create([], $validateException->getError(), 400);
        }
        //加密
        $data['password'] = sha1($data['password']);
        //注册返回数据
        $id = UserModel::create($data)->getData('id');
        //查询数据
        if (empty($id)) {
            return $this->create([], '注册失败~', 400);
        } else {
            return $this->create($id, '注册成功~', 200);
        }

    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        //判断$id 为整型
        if (!Validate::isInteger($id)) {
            return $this->create([], 'id 参数错误~', 400);
        }
        //获取数据
        $data = UserModel::field('id,username,gender,email')->find($id);
        //查询数据
        if (empty($data)) {
            return $this->create([], '没有数据', 204);
        } else {
            return $this->create($data, '数据请求成功', 200);
        }
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        //获取提交数据，这里只修改邮箱
        $data = $request->param();
        //验证邮箱格式
        try {
            //验证数据
            validate(UserValidate::class)->scene('edit')->check($data);
        } catch (ValidateException $validateException) {
            //返回错误
            return $this->create([], $validateException->getError(), 400);
        }
        //获取被修改的数据
        $updateData = UserModel::find($id);
        //判断邮箱和提交的邮箱是否一致
        if ($data['email'] === $updateData->email) {
            return $this->create([], '修改的邮箱和原来的一样~', 400);
        }
        //开始修改
        $id = UserModel::update($data)->getData('id');
        if (empty($id)) {
            return $this->create([], '修改失败~', 400);
        } else {
            return $this->create($id, '修改成功~', 200);
        }
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        //判断$id 为整型
        if (!Validate::isInteger($id)) {
            return $this->create([], 'id 参数错误~', 400);
        }
        try {
            //delete()
            UserModel::find($id)->delete();
            //返回信息
            return $this->create([], '数据删除成功~', 200);
        } catch (\Error $e) {
            return $this->create([], '无法删除或数据不存在导致错误~', 400);
        }
    }


    /**
     * 获取用户相关喜好
     * @param int  $id
     * @return \think\Response
     */
    public function profile($id)
    {
        //判断$id 为整型
        if (!Validate::isInteger($id)) {
            return $this->create([], 'id 参数错误~', 400);
        }
        $data = UserModel::find($id);
        if (!$data){
            return $this->create([], '该用户不存在', 400);
        }
        $data = $data   ->profile()
                        ->field('id,hobby,status')
                        ->select();
        //查询数据
        if ($data->isEmpty()) {
            return $this->create($data, '没有数据', 204);
        } else {
            return $this->create($data, '数据请求成功', 200);
        }
    }



}
